﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using clEntidad;
using System.Data.OleDb;
using clBD;

namespace clBUS
{
    public class BUSRegistro:BUSBase
    {
        public BUSRegistro(String cadBD) : base(cadBD) { }
        public Registro grabar(Registro elemento, Usuario usuario)
        {
            using (OleDbConnection cn = getCn())
            {
                BDRegistro objBDReg = new BDRegistro(cn);
                objBDReg.grabarCab(elemento,usuario.id, usuario.idLogin );
                if (elemento.foto != null)
                    objBDReg.guardarImagen(elemento.id, elemento.foto);

                BDPersona objBDPersona = new BDPersona(cn);
                objBDPersona.grabar(elemento.persona, elemento.id);
                
                objBDPersona.grabarElemento("empresa", elemento.persona.empresa);
                objBDPersona.grabarElemento("cargo", elemento.persona.cargo);

                objBDPersona.grabarElemento("visitado", elemento.persona.visitado.nombre);
                objBDPersona.grabarElemento("ubicacion", elemento.persona.visitado.ubicacion);
                objBDPersona.grabarElemento("area", elemento.persona.visitado.area);

                BDVisitado objBDVisitado = new BDVisitado(cn);
                objBDVisitado.grabar(elemento.persona.visitado);
                foreach (Equipo equipo in elemento.equipos)
                {
                    BDEquipo objBDEqp = new BDEquipo(cn);
                    objBDEqp.grabarElemento("tipo", equipo.tipo);
                    objBDEqp.grabarElemento("marca", equipo.marca);
                    objBDEqp.grabarElemento("modelo", equipo.modelo);
                    objBDEqp.grabar(equipo, elemento.id,"I");
                    objBDReg.grabarDet(equipo, elemento.id);
                }
                return elemento;
            }
        }
        public int buscarIngreso(String texto, int idLocal)
        {
            using (OleDbConnection cn = getCn())
            {
                int id = -1;
                BDRegistro objBDReg = new BDRegistro(cn);
                BDPersona objBDPer = new BDPersona(cn);
                BDEquipo objBDEqp = new BDEquipo(cn);
                if (texto.ToUpper().StartsWith("I"))
                {
                    try
                    {
                        int idB = int.Parse(texto.Substring(1));
                        id = objBDReg.buscarIngreso(idB, idLocal);
                    }
                    catch (FormatException )
                    {
                        id=-1;
                    }
                }
                if (id != -1)
                    return id;
                else
                {
                    id = objBDReg.buscarIngreso(texto, idLocal);
                    if (id == -1)
                        id = objBDReg.buscarIngresoEquipo(texto, idLocal);
                    //Buscamos persona
                    if (id == -1)
                    {
                        OleDbDataReader drPer = objBDPer.get(texto);
                        if (drPer.HasRows)
                            id = 0;
                    }
                    return id;
                }
            }
        }

        public Registro get(int id)
        {
            using (OleDbConnection cn = getCn())
            {
                BDRegistro objBDReg = new BDRegistro(cn);
                Registro elem = objBDReg.getCab(id);
                if (elem == null)
                    return null;
                elem.foto = objBDReg.getFoto(id);
                OleDbDataReader dr = objBDReg.getDet(id);
                while(dr.Read())
                {
                    // num_serie,tipo,marca,modelo
                    Equipo equipo = new Equipo();
                    equipo.numSerie = dr.GetString(0);
                    equipo.tipo = dr.GetString(1);
                    equipo.marca = dr.GetString(2);
                    equipo.modelo = dr.GetString(3);

                    elem.equipos.Add(equipo);
                }
                return elem;
            }

        }
        public List<Registro> getByFec(DateTime fecha, int idLocal)
        {
            using (OleDbConnection cn = getCn())
            {
                return new BDRegistro(cn).getByFec(fecha,idLocal);
            }
        }
        public void salio(int id, int idLogin)
        {
            using (OleDbConnection cn = getCn())
            {
                new BDRegistro(cn).salio(id, idLogin);
            }
        }

    }
}
